class AutorizarController < ApplicationController

  def list
    ejecutivo = Ejecutivo.find(session[:user])
    children = find_children_ids(ejecutivo)
    
    # requisiciones de producto
    conditions = {}
    conditions[:solicitante_id] = children
    conditions[:status_requisicion_id] = RequisicionProducto::SOLICITADA
    @requisiciones = RequisicionProducto.find(:all, :conditions => conditions)
    
    # corporativos
    conditions = {}
    conditions[:ejecutivo_id] = children
    conditions[:status_id] = 0
      
    @corporativos = Corporativo.find(:all, :conditions => conditions)
    
    # soporte de solicitud de materiales
    conditions = {}
    conditions[:status_id] = 0
    conditions[:ejecutivo_id] = children
    @solicitudes = SolicitudMaterial.find(:all, :conditions => conditions)
    
    # concursos
    conditions = {}
    conditions[:status_id] = 0
    conditions[:ejecutivo_id] = children
    conditions[:tipo] = Concurso::VENTAS
    @concursos_ventas = Concurso.find(:all, :conditions => conditions)
    
    conditions[:tipo] = Concurso::PREMIOS
    @concursos_premios = Concurso.find(:all, :conditions => conditions)
    
    conditions[:tipo] = Concurso::OBJETIVOS
    @concursos_objetivos = Concurso.find(:all, :conditions => conditions)
    
    # convenios
    fecha_termino = Time.now.strftime("%Y-%m-%d")
    conditions = [
      "status_id = :status_id AND ejecutivo_id IN (:children) AND fecha_termino > :fecha_termino",
      {:status_id => 0, :children => children, :fecha_termino => fecha_termino}
    ]
    @convenios = Convenio.find(:all, :conditions => conditions)
    
    # promociones que solicitan apoyo de agencia (solo para Gerente OP)
    conditions = {}
    conditions[:requiere_soporte_agencia] = true
    conditions[:ejecutivo_id] = children
    @promociones = Promocion.find(:all, :conditions => conditions)
    
    # ordenes de salida con presupuesto OP (solo para Gerente OP)
    conditions = {}
    conditions[:tipo_presupuesto_id] = 30
    conditions[:status_id] = 0
    conditions[:ejecutivo_id] = children
    @ordenes = OrdenSalida.find(:all, :conditions => conditions)

    @reservas = PresupuestoReserva.find(:all, :conditions => {:ejecutivo_id => session[:user]})
  end
  
  def index
    list
    
    redirect_to :action => "list"
  end
  
  def autorizar
    @orden = OrdenSalida.find(params[:id])
    @total_botellas = 0
    @orden.orden_salida_detalles.each do |o|
      @total_botellas += o.cantidad
    end
    marcas_presupuesto = Presupuesto.find(:all, :conditions => {:ejecutivo_id => session[:user]})
    @marcas_presupuesto = marcas_presupuesto.dup
    @marcas_presupuesto.each do |m|
      m.saldo_inicial = 0.0
    end
    
  end
  
  def autorizar_orden
    @orden_salida = OrdenSalida.find(params[:id])
    marcas_presupuesto = params[:marcas][:presupuesto]
    marcas_presupuesto.each do |p|
      if p[1][:saldo_inicial].to_f > 0.0
        create_cargo(p[0], p[1][:saldo_inicial])
        registrar_presupuesto(@orden_salida, p[0])
      end
    end

    @orden_salida.status_id = 1
    @orden_salida.autorizar_id = session[:user]
    @orden_salida.save!
    
    redirect_to :controller => "/salida"
  end
  
  def autorizar_transferencia
    # aplicar abono en presupuesto destino
    reservacion = PresupuestoReserva.find(params[:id])
    destino = Presupuesto.find(reservacion.destino_id)
    abono = PresupuestoDetalle.new(:importe => reservacion.importe,
      :operacion => PresupuestoDetalle::ABONO)
    
    destino.presupuesto_detalles << abono
    
    # eliminar reservacion de presupuesto
    
    Presupuesto.transaction do
      destino.save!
      PresupuestoReserva.delete(reservacion)
    end
    
    redirect_to :action => "index"
  end
  
  def rechazar_transferencia
    # aplicar abono en presupuesto origen
    reservacion = PresupuestoReserva.find(params[:id])
    origen = Presupuesto.find(reservacion.origen_id)
    cargo = PresupuestoDetalle.new(:importe => reservacion.importe,
    :operacion => PresupuestoDetalle::ABONO)
  
    origen.presupuesto_detalles << cargo
    
    # eliminar reservacion de presupuesto
    Presupuesto.transaction do
      origen.save!
      PresupuestoReserva.delete(reservacion)
    end
    
    redirect_to :action => "index"
  end
end
